package es.usj.dssie.videoclub.dao;

import java.util.Map;
import java.util.HashMap;

/**
 * Clase encargada de generar la Factoria Abstracta para la creaci�n
 * din�mica de clases a partir de las interfaces correspondientes.
 * <br/>
 * En todos los m�todos se llamar� al createDAO(clazz) para obtener 
 * una instancia de una clase.
 *
 */
public class DAOFactory {

    private Map map;
    private static DAOFactory instance;

    private DAOFactory() {
        map = new HashMap();
    }

    public static DAOFactory getInstance() {
        if(instance == null)
            instance = new DAOFactory();
        return instance;
    }

    public ClientDAO getClientDAO() throws DAOException {
        return (ClientDAO) createDAO(ClientJdbcDAO.class);
    }
    public PeliculasAlquilerDAO getPeliculasAlquilerDAO() throws DAOException {
        return (PeliculasAlquilerDAO) createDAO(PeliculasAlquilerJdbcDAO.class);
    }
    public MovieDAO getMovieDAO() throws DAOException {
        return (MovieDAO) createDAO(MovieJdbcDAO.class);
    }
    private Object createDAO(Class clazz) throws DAOException {
        Object obj = map.get(clazz);
        if(obj == null) {
            try {
                    obj = clazz.newInstance();
                    map.put(clazz, obj);
            } catch(Exception e) {
                    throw new DAOException(e);
            }
        }
        return obj;
    }

}
